/*
 * GammaElias.h
 *
 *  Created on: 06/12/2012
 *      Author: d
 */

#ifndef GAMMAELIAS_H_
#define GAMMAELIAS_H_
#include "../common_components/physical_layer_commons.h"
#include "Utilidades.h"
#include "ColeccionDeBits.h"
#include "ColeccionDeBytes.h"
#include "Compresor.h"
#include "Descompresor.h"
#include "../compressors/Compressor.h"

using namespace std;
using namespace physical;

class GammaElias :Compressor{

public:
	GammaElias();

	/**
     * Comprime un array de bytes
     *
     * @param data Array de bytes a comprimir
     * @param compressedData Buffer de bytes donde se guarda la informacion comprimida
     * @param dataSize Tamaño del array de bytes a comprimir
     * @return Tamaño del array de bytes con la informacion comprimida
     */
   size_t compress( const byte* data, byte* compressedData,size_t dataSize );

    /**
     * Descomprime un array de bytes
     *
     * @param compressedData Array bytes con la informacion comprimida
     * @param data Array de bytes donde se guarda la informacion descomprimida
     * @param compressedDataSize Tamaño del array de bytes a descomprimir
     * @return Tamaño del array de bytes con la informacion descomprimida
     */
   size_t uncompress( const byte* compressedData, byte* data,size_t compressedDataSize );

	
	virtual ~GammaElias();
};

#endif /* GAMMAELIAS_H_ */
